<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // let 和 var 都是用于声明变量的

        // 1. let声明的变量，不能重复声明
        let a = 1;
        // let a = 2; // 会报错
        a = 2; // 可以
        // var a = 2; // 会报错,标识符a已经使用

        // 2. let声明的变量，具有块级作用域（只能在内部使用）
        // => 块就是大括号
        {
            var c = 1;
            let d = 2;

            // console.log(c); // 1
            // console.log(d); // 2
        }
        // console.log(c); // 1
        // console.log(d); // 报错

        // for (let i = 0; i < 10; i++) {
        //     console.log(i);// 可以输出
        // }
        // console.log(i); // 报错

        // 3. let声明的变，没有变量提升这个说法，必须先声明然后再使用
        // console.log(x);// 报错
        // let x = 1;

        // 4. let声明的变量，和window对象没有关系，不能通过window来调用
        // 之前声明的变量、函数都相当于是window的成员，可以使用window
        var f = 123;
        var ff = function() {
            console.log(456);
        }
        console.log(window);
        window.ff(); // 456

        let g = 789;
        console.log(window.g); // undefined
    </script>
</body>

</html>